package cn.vehicle.biz;

import cn.vehicle.domains.vo.BasePage;
import cn.vehicle.domains.vo.req.sysRole.AddRolePermissionReq;
import cn.vehicle.domains.vo.req.sysRole.AddRoleReq;
import cn.vehicle.domains.vo.req.sysRole.RoleListReq;
import cn.vehicle.domains.vo.req.sysRole.UpdateRoleReq;
import cn.vehicle.domains.vo.res.sysRole.SysRoleRes;

public interface SysRoleBiz {
    /**
     * 新增角色
     *
     * @param req 新增角色请求参数
     */
    void addRole(AddRoleReq req);

    /**
     * 更新角色信息
     *
     * @param req 更新角色请求参数，需包含主键ID
     */
    void updateRole(UpdateRoleReq req);

    /**
     * 删除角色
     *
     * @param id 角色主键ID
     */
    void deleteRole(Long id);

    /**
     * 根据ID查询角色详情
     *
     * @param id 角色主键ID
     * @return 角色详情响应对象
     */
    SysRoleRes getRoleById(Long id);

    /**
     * 分页查询角色列表
     *
     * @param req 查询条件与分页参数
     * @return 分页结果（角色列表）
     */
    BasePage<SysRoleRes> list(RoleListReq req);

    /**
     * 为角色分配权限
     *
     * <p>支持覆盖式更新，若权限列表为空则清空该角色的所有权限。</p>
     *
     * @param req 角色权限分配请求参数
     */
    void addRolePermissions(AddRolePermissionReq req);

}
